package com.farm.project.service;

import com.farm.project.domain.Project;
import com.farm.project.domain.ProjectActive;
import com.farm.project.domain.ex.EchartsTaskData;
import com.farm.project.domain.ex.FlowModel;
import com.farm.core.sql.query.DataQuery;

import java.util.List;
import java.util.Map;

import com.farm.configer.domain.ex.ConfigerMetaPara;
import com.farm.core.auth.domain.LoginUser;

/* *
 *功能：工程项目服务层接口
 *详细：
 *
 *版本：v0.1
 *作者：FarmCode代码工程
 *日期：20150707114057
 *说明：
 */
public interface ProjectServiceInter {
	/**
	 * 新增实体管理实体
	 * 
	 * @param entity
	 */
	public Project insertProjectEntity(Project entity, LoginUser user);

	/**
	 * 修改实体管理实体
	 * 
	 * @param entity
	 */
	public Project editProjectEntity(Project entity, LoginUser user);

	/**
	 * 删除实体管理实体
	 * 
	 * @param entity
	 */
	public void deleteProjectEntity(String id, LoginUser user);

	/**
	 * 获得实体管理实体
	 * 
	 * @param id
	 * @return
	 */
	public Project getProjectEntity(String id);

	/**
	 * 创建一个基本查询用来查询当前实体管理实体
	 * 
	 * @param query 传入的查询条件封装
	 * @return
	 */
	public DataQuery createProjectSimpleQuery(DataQuery query);

	/**
	 * 设置分类
	 * 
	 * @param tids
	 * @param catalogId
	 * @param currentUser
	 */
	public void updateCatalog(String pids, String catalogId, LoginUser currentUser);

	/**
	 * 获得项目流程数据
	 * 
	 * @param projectId
	 * @return
	 */
	public EchartsTaskData getDatas(String projectId);


	/**
	 * 添加任务（仅任务）
	 * 
	 * @param projectId   项目id
	 * @param parentId    前置节点ID
	 * @param nodeModel   任务类型
	 * @param nodeAppId   任务关联ID
	 * @param currentUser 当前用户
	 */
	public void addTaskNode(String projectId, String parentId, FlowModel flowModel, LoginUser currentUser);

	/**
	 * 刪除項目全部任务（清空）
	 * 
	 * @param projectId
	 * @param currentUser
	 */
	public void deleteAllTasknode(String projectId, LoginUser currentUser);

	/**
	 * 获得发布的生成项目
	 * 
	 * @return
	 */
	public List<Project> getPublicProjects();

	/**
	 * 获得所有实例
	 * 
	 * @return
	 */
	public List<ProjectActive> getAllActive(String projectid);

	/**
	 * 创建一个实例
	 * 
	 * @param projectid
	 * @param note
	 * @param currentUser
	 * @return
	 */
	public ProjectActive creatActive(String projectid, String note, LoginUser currentUser);

	/**
	 * 获取一个实例
	 * 
	 * @param activeid
	 * @return
	 */
	public ProjectActive getActive(String activeid);

	/**
	 * 執行到下一個任務
	 * 
	 * @param activeid
	 */
	public void toDoNextTaskNode(String activeid);

	/**
	 * 为项目实例指定一个任务节点
	 * 
	 * @param activeid
	 * @param nodeid
	 * @param currentUser
	 */
	public void chooseActiveNode(String activeid, String nodeid, LoginUser currentUser);

	/**
	 * 保存项目实例的参数
	 * 
	 * @param activeid
	 * @param key
	 * @param json
	 */
	public void saveActiveParameters(String activeid, String key, String json, LoginUser currentUser);

	/**
	 * 获得项目实例参数
	 * 
	 * @param activeid
	 * @return
	 */
	public List<ConfigerMetaPara> getActiveConfigers(String activeid);

	/**
	 * 获得项目实例参数
	 * 
	 * @param activeid
	 * @return
	 */
	public Map<String, Object> getActiveConfigerMap(String activeid);

	/**
	 * 删除项目实例
	 * 
	 * @param id
	 */
	public void delActive(String activeid);

	/**
	 * 获得项目参数的模板表示
	 * 
	 * @param activeid
	 * @return
	 */
	public List<String> getActiveTemplateMarkMap(String activeid);

	/**
	 * 获取项目json（项目在系统间同步）
	 * 
	 * @param projectid
	 * @return
	 */
	public String getProjectJson(String projectid);

	/**
	 * 同json导入项目
	 * 
	 * @param json
	 * @return
	 */
	public String importProjectByJson(String json, LoginUser currentUser);

	/**
	 * 将任务绑定到业务
	 * 
	 * @param projectId
	 * @param nodeId
	 * @param fmodel
	 * @param currentUser
	 */
	public void bandTaskNodeToModel(String projectId, String nodeId, String nodeModel, String nodeAppId,
			LoginUser currentUser);
}